package componentes;

import excecao.ExcecaoMemoria;
import main.Constante;

public class Memoria {
	
	private String[] dado;
	private char controle;
	
	public Memoria(int tamMemoria) {
		this.dado = new String[tamMemoria];
		for (int i=0; i<this.dado.length; i++){
			this.dado[i] = Constante.LIXO.getValor();
		}
	}

	public int getTamanho(){
		return this.dado.length;
	}	
	
	public String[] getDado(){
		return this.dado;
	}
	
	public String getDado(String pos) throws ExcecaoMemoria{
		int i = 0;
		try{
			i = Integer.parseInt(pos, 2);
		}
		catch(Exception e){
			throw new ExcecaoMemoria("[1]Posicao de memória invalida.\n" + pos + " não pode ser convertida para binário.");
		}
				
		if (i >= this.dado.length){
			throw new ExcecaoMemoria("[2]Posicao de memória invalida.\n" + pos + " excede capacidade da memoria.");
		}
		
/*		if(this.dado[i] == ""){
			return Constante.LIXO.getValor();
		}
*/		
		return this.dado[i];
	}

	public void setDado(String posicao, String s) throws ExcecaoMemoria{
		int i = 0;
		try{
			i = Integer.parseInt(posicao, 2);
		}
		catch(Exception e){
			throw new ExcecaoMemoria("Posicao de memória invalida.\n" + posicao + " não pode ser convertida para binário.");
		}		
		this.dado[i] = s;
	}
	
	public char getControle() {
		return controle;
	}

	public void setControle(char controle) {
		this.controle = controle;
	}
}
